/*+-------------------------------------------------------------------------+
  | Interface IMAGEM                                              	    |
  | ---------------------                                                   |
  |                                                                         |
  | IMAGEM.H                                                                |
  |                                                                         |
  |            Arquivo que contem as rotinas para ler/gravar imagens em for-|
  | mato PGM ASCII ou binario que nada mais sao do que formatos de imagens  | 
  | em niveis de cinza.                                          	    |
  |                                                                         |
  +-------------------------------------------------------------------------+*/
#include <stdio.h>

/*+-------------------------------------------------------------------------+
  | Estrutura Imagem                                           	   	    |
  | ---------------------                                                   |
  |       								    |
  |	Essa estrutura representa uma imagem em niveis de cinza.	    |
  |									     |
  |      int *val - esse campo possui um vetor com a intensidade dos pixeis  |
  |                 da imagem, na ordem de leitura (da esquerda para direita,|
  |                 de cima para baixo)   				     |
  |      int ncols - esse campo possui o numero de colunas da imagem         |
  |      int nlins - esse campo possui o numero de linhas da imagem          |
  |      int *lin - esse campo possui um vetor com os indices correspondentes|
  |                 a cada linha da imagem na coluna 0.			     |
  |                 Assim lin[0] = 0, lin[1] = ncols, lin[i] = i*ncols       |
  |                                                                          |
  +-------------------------------------------------------------------------+*/


typedef struct _imagem {
  int *val;			
  int ncols,nlins;		
  int *lin;			
} Imagem;

/* aloca espaco para a imagem */
Imagem  *cria_imagem(int ncols, int nlins);

/* libera espaco alocado para imagem */
void    destroi_imagem(Imagem **img);

/* copia conteudo de uma imagem para outra */
Imagem  *copia_imagem(Imagem *img);

/* le imagem no formato PGM (niveis de cinza) */
Imagem  *le_imagem(char *nome);

/* grava imagem no formato PGM */
void   	grava_imagem(Imagem *img, char *nome);
void    imprime_imagem(Imagem *img, FILE *arq);

/*retorna menor / maior valor de imagem*/ 
int     min_val(Imagem *img);
int     max_val(Imagem *img);

/*verifica se pixel esta nos limites da imagem*/
int    pixel_valido(Imagem *img, int col, int lin);
